#pragma once

/* 聊天会话成员表映射对象 */

#include <string>
#include <cstddef> // std::size_t
#include <odb/nullable.hxx>
#include <odb/core.hxx>

namespace ChatSystem
{
    #pragma db object table("chat_session_member")
    class ChatSessionMember
    {
    public:
        ChatSessionMember(){}
        ChatSessionMember(const std::string& chat_session_id, const std::string& uid)
        :_chat_session_id(chat_session_id), _user_id(uid)
        {}
        ~ChatSessionMember(){}

    //获取聊天会话ID
    std::string chat_session_id()const
    {
        return _chat_session_id;
    }
    std::string chat_session_id()
    {
        return _chat_session_id;
    }
    //修改聊天会话ID
    void chat_session_id(const std::string& val)
    {
        _chat_session_id = val;
    }

    //获取用户ID
    std::string user_id() const
    {
        return _user_id;
    }
    //获取用户ID
    std::string user_id()
    {
        return _user_id;
    }
    //修改用户ID
    void user_id(const std::string& uid)
    {
        _user_id = uid;
    }

    private:
        friend class odb::access;   //建立友元关系，以便odb框架来访问我们的私有成员
        #pragma db id auto
        unsigned long _id;  //主键---这个只能保证同一主机上的用户之间不能重复，而不能保证不同主机数据库上id的唯一性
        #pragma db type("varchar(64)") index        //会通过会话ID来查找会话中的成员，所以设置为普通索引
        std::string _chat_session_id;       //聊天会话ID---可能会重复，一个会话中有可能有多个成员，每条数据中都是一个成员的会话ID和用户ID组成的
        #pragma db type("varchar(64)")
        std::string _user_id;       //用户---可能会重复，一个用户可能在多个会话中，每条数据中都是一个成员的会话ID和用户ID组成的
    };
}

//odb 编译：odb -d mysql --generate-query --generate-schema --profile boost/date-time chat_session_member.hxx